/*********************************
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
*-- data: 2013-11-10 ------------*
**********************************/

package net.kdh.knieja.kontroler.narzedzia;

import net.kdh.knieja.model.wspolne.LMD;
import net.kdh.knieja.model.biznes.Druzyna;
import net.kdh.knieja.model.biznes.Osoba;
import net.kdh.knieja.model.biznes.Zastep;
import net.kdh.knieja.model.system.Artykul;
import net.kdh.knieja.model.system.Post;
import net.kdh.knieja.model.system.Uzytkownik;
import net.kdh.knieja.model.system.Wydarzenie;
import net.kdh.knieja.model.system.token.Token;
import net.kdh.knieja.model.wspolne.DataCzas;
import net.kdh.knieja.model.wspolne.wyjatki.BladWalidacjiWyjatek;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class Walidator {
    
    public <K extends LMD> void weryfikujKlase(K ... klasy) throws BladWalidacjiWyjatek {
        for(K klasa : klasy) {
            weryfikujKlase(klasa);
        }
    }
    
    private <K extends LMD> void weryfikujKlase(K klasa) throws BladWalidacjiWyjatek {
        if(klasa instanceof Token) {
            weryfikuj((Token)klasa);
            return;
        }
        
        if(klasa instanceof Osoba) {
            weryfikuj((Osoba)klasa);
            return;
        }
        if(klasa instanceof Artykul) {
            weryfikuj((Artykul)klasa);
            if(klasa instanceof Wydarzenie) {
                weryfikuj((Wydarzenie)klasa);
            }
            return;
        }
        if(klasa instanceof Post) {
            weryfikuj((Post)klasa);
            return;
        }
        if(klasa instanceof Uzytkownik) {
            weryfikuj((Uzytkownik)klasa);
            return;
        }
        if(klasa instanceof Druzyna) {
            weryfikuj((Druzyna)klasa);
            return;
        }
        if(klasa instanceof Zastep) {
            weryfikuj((Zastep)klasa);
            return;
        }
    }
    
    
/**
 * @TODO
 */
    private void weryfikuj(Artykul artykul) throws BladWalidacjiWyjatek {
        generujWyjatek(artykul);
    }
    
    private void weryfikuj(Wydarzenie wydarzenie) throws BladWalidacjiWyjatek {
        generujWyjatek(wydarzenie);
    }
    private void weryfikuj(Post post) throws BladWalidacjiWyjatek {
        generujWyjatek(post);
    }
    private void weryfikuj(Uzytkownik uzytkownik) throws BladWalidacjiWyjatek {
        generujWyjatek(uzytkownik);
    }
    private void weryfikuj(Druzyna druzyna) throws BladWalidacjiWyjatek {
        generujWyjatek(druzyna);
    }
    private void weryfikuj(Osoba osoba) throws BladWalidacjiWyjatek {
        generujWyjatek(osoba);
    }
    private void weryfikuj(Zastep zastep) throws BladWalidacjiWyjatek {
        generujWyjatek(zastep);
    }
    private void weryfikuj(Token token) throws BladWalidacjiWyjatek {
        if(token == null 
                || token.getDataUtworzenia() == null
                || token.getDataWygasniecia() == null
                || token.getIdUzytkownika() == null
                || token.getToken() == null
                || "".equals(token.getIdUzytkownika())
                || "".equals(token.getToken()))
            generujWyjatek(token);
        if(!DataCzas.czyMinelo(token.getDataUtworzenia())
                || DataCzas.czyMinelo(token.getDataWygasniecia()))
            generujWyjatek(token);
    }
    
    private void generujWyjatek(Object o) throws BladWalidacjiWyjatek {
        String s = "WALIDATOR:\n";
        s+=o.getClass()+"\n";
        s+=o.toString()+"\n";
        throw new BladWalidacjiWyjatek(s);
    }
}
